tests: add tests for contenturl and mirrorlist
authorJonathan Lebon <jlebon@redhat.com>
Thu, 25 Aug 2016 19:34:34 +0000 (15:34 -0400)
committerAtomic Bot <atomic-devel@projectatomic.io>
Wed, 31 Aug 2016 16:52:12 +0000 (16:52 +0000)
Closes: #469
Approved by: cgwalters

Makefile-tests.am
tests/test-pull-contenturl.sh [new file with mode: 0755]
tests/test-pull-mirrorlist.sh [new file with mode: 0755]

index 80f60add34d6e530977ef3c64522686a15051a11..7d3f40114501bd4804145a1ec621a940c58f2709 100644 (file)
@@ -88,6 +88,8 @@ dist_test_scripts = \
        tests/test-refs.sh \
        tests/test-demo-buildsystem.sh \
        tests/test-switchroot.sh \
+       tests/test-pull-contenturl.sh \
+       tests/test-pull-mirrorlist.sh \
        $(NULL)
 
 if BUILDOPT_FUSE
diff --git a/tests/test-pull-contenturl.sh b/tests/test-pull-contenturl.sh
new file mode 100755 (executable)
index 0000000..16dcbe4
--- /dev/null
@@ -0,0 +1,75 @@
+#!/bin/bash
+#
+# Copyright (C) 2016 Red Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+set -euo pipefail
+
+. $(dirname $0)/libtest.sh
+
+echo "1..2"
+
+COMMIT_SIGN=""
+if has_gpgme; then
+  COMMIT_SIGN="--gpg-homedir=${TEST_GPG_KEYHOME} --gpg-sign=${TEST_GPG_KEYID_1}"
+fi
+
+setup_fake_remote_repo1 "archive-z2" "${COMMIT_SIGN}"
+
+# create a summary
+${CMD_PREFIX} ostree --repo=${test_tmpdir}/ostree-srv/gnomerepo \
+  summary -u ${COMMIT_SIGN}
+
+# Let's bring up an identical server in which meta files are missing
+cd ${test_tmpdir}
+mkdir httpd-content
+cd httpd-content
+cp -a ${test_tmpdir}/ostree-srv ostree
+
+# delete all the meta stuff from here
+rm ostree/gnomerepo/summary
+if has_gpgme; then
+  rm ostree/gnomerepo/summary.sig
+  find ostree/gnomerepo/objects -name '*.commitmeta' | xargs rm
+fi
+
+# delete all the content stuff from there
+find ${test_tmpdir}/ostree-srv/gnomerepo/objects \
+  ! -name '*.commitmeta' -type f | xargs rm
+
+${CMD_PREFIX} ostree trivial-httpd --autoexit --daemonize \
+  -p ${test_tmpdir}/httpd-content-port
+content_port=$(cat ${test_tmpdir}/httpd-content-port)
+echo "http://127.0.0.1:${content_port}" > ${test_tmpdir}/httpd-content-address
+
+cd ${test_tmpdir}
+mkdir repo
+${CMD_PREFIX} ostree --repo=repo init
+if has_gpgme; then VERIFY=true; else VERIFY=false; fi
+${CMD_PREFIX} ostree --repo=repo remote add origin \
+  --set=gpg-verify=$VERIFY --set=gpg-verify-summary=$VERIFY \
+  --contenturl=$(cat httpd-content-address)/ostree/gnomerepo \
+  $(cat httpd-address)/ostree/gnomerepo
+${CMD_PREFIX} ostree --repo=repo pull origin:main
+
+echo "ok pull objects from contenturl"
+
+if ! has_gpgme; then
+  echo "ok don't pull sigs from contenturl # SKIP not compiled with gpgme"
+else
+  echo "ok don't pull sigs from contenturl"
+fi
diff --git a/tests/test-pull-mirrorlist.sh b/tests/test-pull-mirrorlist.sh
new file mode 100755 (executable)
index 0000000..454014c
--- /dev/null
@@ -0,0 +1,106 @@
+#!/bin/bash
+#
+# Copyright (C) 2016 Red Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+set -euo pipefail
+
+. $(dirname $0)/libtest.sh
+
+echo "1..3"
+
+setup_fake_remote_repo1 "archive-z2"
+
+setup_mirror () {
+  name=$1; shift
+
+  cd ${test_tmpdir}
+  mkdir $name
+  cd $name
+  cp -a ${test_tmpdir}/ostree-srv ostree
+
+  ${CMD_PREFIX} ostree trivial-httpd --autoexit --daemonize \
+    -p ${test_tmpdir}/${name}-port
+  port=$(cat ${test_tmpdir}/${name}-port)
+  echo "http://127.0.0.1:${port}" > ${test_tmpdir}/${name}-address
+}
+
+setup_mirror content_mirror1
+setup_mirror content_mirror2
+setup_mirror content_mirror3
+
+# Let's delete a file from 1 so that it falls back on 2
+cd ${test_tmpdir}/content_mirror1/ostree/gnomerepo
+filez=$(find objects/ -name '*.filez' | head -n 1)
+rm ${filez}
+
+# Let's delete a file from 1 and 2 so that it falls back on 3
+cd ${test_tmpdir}/content_mirror1/ostree/gnomerepo
+filez=$(find objects/ -name '*.filez' | head -n 1)
+rm ${filez}
+cd ${test_tmpdir}/content_mirror2/ostree/gnomerepo
+rm ${filez}
+
+# OK, let's just shove the mirrorlist in the first httpd
+cat > ${test_tmpdir}/ostree-srv/mirrorlist <<EOF
+
+# comment with empty lines around
+
+http://example.com/nonexistent
+
+$(cat ${test_tmpdir}/content_mirror1-address)/ostree/gnomerepo
+$(cat ${test_tmpdir}/content_mirror2-address)/ostree/gnomerepo
+$(cat ${test_tmpdir}/content_mirror3-address)/ostree/gnomerepo
+
+EOF
+
+# first let's try just url
+
+cd ${test_tmpdir}
+mkdir repo
+${CMD_PREFIX} ostree --repo=repo init
+${CMD_PREFIX} ostree --repo=repo remote add origin --no-gpg-verify \
+  mirrorlist=$(cat httpd-address)/ostree/mirrorlist
+${CMD_PREFIX} ostree --repo=repo pull origin:main
+
+echo "ok pull objects from mirrorlist"
+
+# now let's try contenturl only mirrorlist
+
+cd ${test_tmpdir}
+rm -rf repo
+mkdir repo
+${CMD_PREFIX} ostree --repo=repo init
+${CMD_PREFIX} ostree --repo=repo remote add origin --no-gpg-verify \
+  --contenturl=mirrorlist=$(cat httpd-address)/ostree/mirrorlist \
+  $(cat httpd-address)/ostree/gnomerepo
+${CMD_PREFIX} ostree --repo=repo pull origin:main
+
+echo "ok pull objects from contenturl mirrorlist"
+
+# both
+
+cd ${test_tmpdir}
+rm -rf repo
+mkdir repo
+${CMD_PREFIX} ostree --repo=repo init
+${CMD_PREFIX} ostree --repo=repo remote add origin --no-gpg-verify \
+  --contenturl=mirrorlist=$(cat httpd-address)/ostree/mirrorlist \
+  mirrorlist=$(cat httpd-address)/ostree/mirrorlist
+${CMD_PREFIX} ostree --repo=repo pull origin:main
+
+echo "ok pull objects from split urls mirrorlists"